import util from '@/assets/utils.holdtime.js';
import axios from 'axios';

// 封装成vue的plugin, 使用Vue.use(xxx)调用
export default {
	install: (Vue, options) => {
		let axiosIns = axios.create(options);

		Vue.prototype.$http = {
			/**
			 * get(url,[data],[success],[type])
			 * url:待载入页面的URL地址
			 * data:待发送 Key/value 参数。
			 * success:载入成功时回调函数。
			 * type:返回内容格式，'arraybuffer', 'blob', 'document', 'json', 'text', 'stream', 默认'json'
			 */
			get: (url, data, success, type) => {
				if(util.isFunction(data)) {
					type = type || success;
					success = data;
					data = undefined;
				}

				return axiosIns.get(url, {
					params: util.isObject(data) ? data : {},
					responseType: util.isString(type) ? type : 'json'
				}).then((response) => {
					if(util.isFunction(success)) {
						success.call(Vue, response.data, response.status, response);
					}
				});
			},
			/**
			 * delete(url,[success],[type])
			 * url:发送请求地址。
			 * callback:发送成功时回调函数。
			 * type:返回内容格式，'arraybuffer', 'blob', 'document', 'json', 'text', 'stream', 默认'json'
			 */
			delete: (url, success, type) => {
				return axiosIns.delete(url, {
					responseType: util.isString(type) ? type : 'json'
				}).then((response) => {
					if(util.isFunction(success)) {
						success.call(Vue, response.data, response.status, response);
					}
				});
			},
			/**
			 * head(url,[success],[type])
			 * url:发送请求地址。
			 * callback:发送成功时回调函数。
			 * type:返回内容格式，'arraybuffer', 'blob', 'document', 'json', 'text', 'stream', 默认'json'
			 */
			head: (url, success, type) => {
				return axiosIns.head(url, {
					responseType: util.isString(type) ? type : 'json'
				}).then((response) => {
					if(util.isFunction(success)) {
						success.call(Vue, response.data, response.status, response);
					}
				});
			},
			/**
			 * post(url,[data],[success],[type])
			 * url:发送请求地址。
			 * data:待发送 Key/value 参数。
			 * callback:发送成功时回调函数。
			 * type:返回内容格式，'arraybuffer', 'blob', 'document', 'json', 'text', 'stream', 默认'json'
			 */
			post: (url, data, success, type) => {
				if(util.isFunction(data)) {
					type = type || success;
					success = data;
					data = undefined;
				}

				return axiosIns.post(url, util.isObject(data) ? data : {}, {
					responseType: util.isString(type) ? type : 'json'
				}).then((response) => {
					if(util.isFunction(success)) {
						success.call(Vue, response.data, response.status, response);
					}
				});
			},
			/**
			 * put(url,[data],[success],[type])
			 * url:发送请求地址。
			 * data:待发送 Key/value 参数。
			 * callback:发送成功时回调函数。
			 * type:返回内容格式，'arraybuffer', 'blob', 'document', 'json', 'text', 'stream', 默认'json'
			 */
			put: (url, data, success, type) => {
				if(util.isFunction(data)) {
					type = type || success;
					success = data;
					data = undefined;
				}

				return axiosIns.put(url, util.isObject(data) ? data : {}, {
					responseType: util.isString(type) ? type : 'json'
				}).then((response) => {
					if(util.isFunction(success)) {
						success.call(Vue, response.data, response.status, response);
					}
				});
			},
			/**
			 * patch(url,[data],[success],[type])
			 * url:发送请求地址。
			 * data:待发送 Key/value 参数。
			 * callback:发送成功时回调函数。
			 * type:返回内容格式，'arraybuffer', 'blob', 'document', 'json', 'text', 'stream', 默认'json'
			 */
			patch: (url, data, success, type) => {
				if(util.isFunction(data)) {
					type = type || success;
					success = data;
					data = undefined;
				}

				return axiosIns.patch(url, util.isObject(data) ? data : {}, {
					responseType: util.isString(type) ? type : 'json'
				}).then((response) => {
					if(util.isFunction(success)) {
						success.call(Vue, response.data, response.status, response);
					}
				});
			},
			__axios: axiosIns
		};
	}
}